#!/bin/bash
#Comando Initializer
#
#Descripcion
#Es el primero en orden de ejecucion. Se dispara manualmente.
#El proposito de este comando es preparar el entorno de ejecucion del ambiente.
#El proceso se inicia con el aseuramiento de la disponibilidad de la informacion para llevar adelante el proceso total.
#Es indispensable contar con el archivo de configuracion, los comandos, archivos maestros y tablas con los permisos adecuados.
#Continua con la asignacion de valor a un conjunto de variables de ambiente y luego ofrece arrancar el comando de recepcion de novedades.
#

################## FUNCIONES AUXILIARES
#ParsearValor(){
#	aux=$(grep '^$1' $CONFIGFILE | awk -F"=" '{print $2}')
#	echo $aux
#}

UnSetVars(){
	unset BINDIR
	unset MAEDIR
	unset NOVEDIR
	unset ACEPDIR
	unset INFODIR
	unset RECHDIR
	unset LOGDIR
}


################# PROGRAMA PRINCIPAL

#Directorio de instalacion
GRUPO="../conf"

#Inicio el Log
COMANDO="Initializer.sh"


#Verifico que exista el Installer.conf
CONFIGFILE="$GRUPO/Installer.conf"
if [ ! -f $CONFIGFILE ]; then
	#./Logging.sh $COMANDO "No se encontro el $CONFIGFILE saliendo." "E"
	echo "No existe el $CONFIGFILE";
	echo "Reinstale por favor.";
	exit 1
fi



#Verifico si el ambiente ya fue inicializado
if [[ ! -z "$AMBIENTEINIT" ]]; then
	./Logging.sh $COMANDO "Ambiente previamente inicializado." "W"
	echo "Ambiente ya inicializado. Si quiere reiniciar termine su sesion e ingrese nuevamente."
	exit 1
fi


#Parseo el archivo y cargo las variables de los directorios.
export GRUPO=$(grep '^GRUPO' $CONFIGFILE | awk -F"=" '{print $2}')
export BINDIR="$GRUPO$(grep '^BINDIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export MAEDIR="$GRUPO$(grep '^MAEDIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export NOVEDIR="$GRUPO$(grep '^NOVEDIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export ACEPDIR="$GRUPO$(grep '^ACEPDIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export INFODIR="$GRUPO$(grep '^INFODIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export RECHDIR="$GRUPO$(grep '^RECHDIR' $CONFIGFILE | awk -F"=" '{print $2}')"
export LOGDIR="$GRUPO$(grep '^LOGDIR' $CONFIGFILE | awk -F"=" '{print $2}')"

#Cargo las demas variables del conf
export LOGEXT=$(grep '^LOGEXT' $CONFIGFILE | awk -F"=" '{print $2}')
export LOGSIZE=$(grep '^LOGSIZE' $CONFIGFILE | awk -F"=" '{print $2}')
export DATASIZE=$(grep '^DATASIZE' $CONFIGFILE | awk -F"=" '{print $2}')

#Logueo aca porque antes no existirian las variables.
./Logging.sh $COMANDO "Comando Initializer Inicio de ejecucion." "I"

#Lista de las variables de ambiente correspondientes a directorios
LISTAVARS=($BINDIR $MAEDIR $NOVEDIR $ACEPDIR $INFODIR $RECHDIR $LOGDIR)

#Verifico que existan los directorios y archivos obligatorios.
for i in ${LISTAVARS[*]}
do
	if [ ! -d $i ]; then
		./Logging.sh $COMANDO "Directorio $i no hallado, saliendo." "E"
		echo "Falta el directorio $i";
		echo "Por favor reinstale";
		UnSetVars
		exit 1
	else
		if [ ! -r $i ]; then
			chmod u+r $i
			./Logging.sh $COMANDO "Permiso de lectura agregado al directorio $i ." "I"
			echo "Permiso de lectura agregado a $i"
		fi
		if [ ! -w $i ]; then
			chmod u+w $i
			./Logging.sh $COMANDO "Permiso de escritura agregado al directorio $i ." "I"
			echo "permiso de escritura agregado a $i"
		fi
		./Logging.sh $COMANDO "Directorio: $i OK" "I"
		echo "Directorio: $i OK"
	fi
done

LISTAARCHIVOS=("$MAEDIR/um.tab" "$MAEDIR/asociados.mae" "$MAEDIR/super.mae")
for archivo in ${LISTAARCHIVOS[*]}
do
	if [ ! -f $archivo ]; then
		./Logging.sh $COMANDO "Falta el archivo $archivo. Saliendo." "E"
		echo "Falta el archivo $archivo.";
		UnSetVars
		exit 1
	else
		#Verifico que posean permisos de lectura y escritura
		echo "Archivo: $archivo OK";
		if [ ! -r $archivo ]; then
			chmod u+r $archivo
			./Logging.sh $COMANDO "Permiso de lectura agregado al archivo $archivo ." "W"
			echo "Permiso de lectura agregado a: $archivo"
		fi
		if [ ! -w $archivo ]; then
			chmod u+w $archivo
			./Logging.sh $COMANDO "Permiso de lectura agregado al archivo $archivo ." "W"
			echo "Permiso de escritura agregado a: $archivo"
		fi
	fi
done

#Pregunto si quiere arrancar el Listener
while true ; do
	read -p "Quiere arrancar el Listener ahora? (SI - NO): " resp;
	if [ ! -z $(echo $resp | grep '^[Ss][Ii]$') ]; then
		resultado=0;
		break;
	elif [ ! -z $(echo $resp | grep '^[Nn][Oo]$') ]; then			
		resultado=1;
		break;
	else
		echo "Debes responder Si - No";
	fi
done

#Agrego el directorio BIN al PATH
export PATH="$PATH:$BINDIR"
export AMBIENTEINIT=1


./Logging.sh $COMANDO "Sistema INICIADO" "I"
echo "Directorio de configuracion: $CONFDIR"
echo "Directorio de ejecutables: $BINDIR"
echo "Directorio de maestros y tablas: $MAEDIR"
echo "Directorio de novedades: $NOVEDIR"
echo "Directorio de aceptados: $ACEPDIR"
echo "Directorio de informes: $INFODIR"
echo "Directorio de rechazados: $RECHDIR"
echo "Directorio de logs: $LOGDIR/<comando>$LOGEXT"
echo "Estado del sistema: INICIADO"


if [[ $resultado = "0" ]]; then
	#Veo si ya se encuentra ajecutnadose el Listener
	pid=$(obtpid.sh "Listener.sh")
	echo $pid
	if [ ! -z $pid ]; then
		echo "El listener ya se encuentra ejecutandose bajo el PID: $pid";
	else
		echo "Arrancando Listener...";
        Listener.sh &
        pid=$(obtpid.sh "Listener.sh")
        echo "Listener corriendo bajo el id: $pid"
        ./Logging.sh $COMANDO "Listener corriendo bajo el id: $pid" "I"
	fi
else
	echo "No arrancar ahora."
	echo "Para inciar ejecute el comando start de la siguiente forma: Start.sh Listener.sh -bg"
fi




